#include"SystemHead.h"

void PV(int semid,int opration)
{
    struct sembuf buf;
    buf.sem_num=0;
    buf.sem_flg=SEM_UNDO;
    buf.sem_op=opration;
    semop(semid,&buf,1);
}

int main()
{
    key_t key=ftok("./",12);
    if(key<0)
    {
        perror("ftok:");
    }
    int semid=semget(key,1,0666);
    semctl(semid,0,SETVAL,1);

    pid_t pid = fork();
    if(pid<0)
    {
        perror("fork:");
    }

    if(pid==0)
    {
        while(1)
        {
            PV(semid,-1);
            printf("child get the sem!\n");
            sleep(1);
            PV(semid,1);
        }

    }
    else
    {
        while(1)
        {
            PV(semid,-1);
            printf("parent get the sem!\n");
            sleep(1);
            PV(semid,1);            
        }
    }
    semctl(semid,0,IPC_RMID);
    return 0;
}